// node 12_实现颜色转换.js

// padStart()       填充字符串，1参为总长度，2参为填充字符（循环填充，直到总长度满足1参长度）-在前面填充
// padEnd()         填充字符串，1参为总长度，2参为填充字符（循环填充，直到总长度满足1参长度）-在后面填充
// match()          接收一个正则表达式，进行模式匹配
// reduce()         数组累计操作，1参为回调函数（上次的结，本次的参数，本次参数的索引，调用该方法的数组），2参为累计初始值
// toUpperCase()    字符串转大写

//实现颜色转换 rgb -> 十六进制
//例：'rgb(255,255,255)' -> '#FFFFFF'

let myString = 'rgb(255,155,5)'

//方法1
//字符串操作，该方法有局限
function operateMyString(myString) {
    let arr = myString.substring(4,myString.length-1).split(',')
    let newArr = arr.map(item => {
        // return (Number(item) < 16 ? '0':'') + (Number(item)).toString(16)    //方法1
        // return ('0'+Number(item).toString(16)).slice(1)                      //方法2
        return Number(item).toString(16).padStart(2,0)                          //方法3
    })
    return '#' + newArr.join('')
}

//方法2
//正则表达式
function operateMyString2(myString) {
    // let reg = /^(rgb|RGB)\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/
    // let match = myString.match(reg)
    // let arr = [match[2],match[3],match[4]]
    let reg = /\d+/g
    let arr = myString.match(reg)
    let newArr = arr.reduce((pro,data)=>{
        return pro + Number(data).toString(16).padStart(2,0)
    },'#')
    return newArr
}

console.log('方法1:'+operateMyString(myString).toUpperCase())
console.log('方法2:'+operateMyString2(myString).toUpperCase())